#ifndef USART_H
#define USART_H

#include <libopencm3/stm32/usart.h>
#include <stdint.h>

// 串口参数结构体
typedef struct {
    uint32_t baudrate;
    uint8_t databits;
    uint32_t stopbits;
    uint32_t parity;
    uint32_t flow_control;
    uint32_t mode;
} UsartParameters;

// 初始化函数
UsartParameters usart_default_params(void);
void usart_auto_init(uint32_t usart);
void usart_manual_init(uint32_t usart, const UsartParameters *params);

// 发送函数
void usart_send_byte(uint32_t usart, uint8_t byte);
void usart_send_string(uint32_t usart, const char *str);

// 阻塞式接收
uint8_t usart_recv_byte(uint32_t usart);

// 非阻塞接收
void usart_enable_nonblocking(uint32_t usart);
bool usart_has_data(uint32_t usart);
int usart_try_recv_byte(uint32_t usart);
bool usart_has_line(uint32_t usart);
const char* usart_get_line(uint32_t usart);

#endif